﻿namespace DoNet.TenPay
{
    /// <summary>
    /// 退款返回结果
    /// </summary>
    public interface INotifyRefundBase
    {
        /// <summary>
        /// 返回状态码
        /// SUCCESS/FAIL 此字段是通信标识，非交易标识，交易是否成功需要查看result_code来判断
        /// </summary>
        string return_code { set; get; }
        /// <summary>
        /// 返回信息
        /// 返回信息，如非空，为错误原因 签名失败 参数格式校验错误
        /// </summary>
        string return_msg { set; get; }
        /// <summary>
        /// 商户公众账号/应用ID
        /// 调用接口提交的商户公众账号ID
        /// </summary>
        string appid { set; get; }
        /// <summary>
        /// 商户号
        /// 调用接口提交的商户号
        /// </summary>
        string mch_id { set; get; }
        /// <summary>
        /// 随机字符串
        /// 微信返回的随机字符串
        /// </summary>
        string nonce_str { set; get; }
        /// <summary>
        /// 加密信息
        /// 加密信息请用商户密钥进行解密，详见解密方式 
        /// </summary>
        string req_info { set; get; }
    }
    /// <summary>
    /// 退款返回结果
    /// </summary>
    public class NotifyRefundBase : ResponseBase, INotifyRefundBase
    {
        /// <summary>
        /// 商户公众账号/应用ID
        /// 调用接口提交的商户公众账号ID
        /// </summary>
        public string appid { set; get; }
        /// <summary>
        /// 商户号
        /// 调用接口提交的商户号
        /// </summary>
        public string mch_id { set; get; }
        /// <summary>
        /// 随机字符串
        /// 微信返回的随机字符串
        /// </summary>
        public string nonce_str { set; get; }
        /// <summary>
        /// 加密信息
        /// 加密信息请用商户密钥进行解密，详见解密方式 
        /// </summary>
        public string req_info { set; get; }
    }
    /// <summary>
    /// 退款返回结果（商户）
    /// </summary>
    public class ResponseNotifyRefund : NotifyRefundBase
    {
    }
    /// <summary>
    /// 退款返回结果（商户）
    /// </summary>
    public class ResponseNotifyRefundSp : NotifyRefundBase
    {
        /// <summary>
        /// 子商户公众账号/应用ID
        /// 调用接口提交的子商户公众账号ID
        /// </summary>
        public string sub_appid { set; get; }
        /// <summary>
        /// 子商户号
        /// 调用接口提交的子商户号
        /// </summary>
        public string sub_mch_id { set; get; }
    }

    /// <summary>
    /// 退款返回结果 解密后的数据
    /// </summary>
    public class ResponseNotifyRefundDecode : ResponseBase
    {
        /// <summary>
        /// 微信订单号
        /// </summary>
        public string transaction_id { set; get; }
        /// <summary>
        /// 商户订单号
        /// 商户系统内部订单号，要求32个字符内（最少6个字符），只能是数字、大小写字母_-|*且在同一个商户号下唯一。详见商户订单号
        /// </summary>
        public string out_trade_no { set; get; }
        /// <summary>
        /// 商户退款单号
        /// 商户系统内部的退款单号，商户系统内部唯一，只能是数字、大小写字母_-|*@ ，同一退款单号多次请求只退一笔。
        /// </summary>
        public string out_refund_no { set; get; }
        /// <summary>
        /// 微信退款单号
        /// </summary>
        public string refund_id { set; get; }
        /// <summary>
        /// 订单金额
        /// 订单总金额，单位为分，只能为整数，详见支付金额
        /// </summary>
        public int total_fee { set; get; }
        /// <summary>
        /// 应结订单金额
        /// 当订单使用了免充值型优惠券后返回该参数，应结订单金额=订单金额-免充值优惠券金额。
        /// </summary>
        public int settlement_total_fee { set; get; }
        /// <summary>
        /// 申请退款金额
        /// 退款总金额,单位为分
        /// </summary>
        public int refund_fee { set; get; }
        /// <summary>
        /// 退款金额
        /// 退款金额=申请退款金额-非充值代金券退款金额，退款金额<=申请退款金额
        /// </summary>
        public int settlement_refund_fee { set; get; }
        /// <summary>
        /// 退款状态
        /// "SUCCESS-退款成功 、 CHANGE-退款异常 、 REFUNDCLOSE—退款关闭"
        /// </summary>
        public string refund_status { set; get; }
        /// <summary>
        /// 退款成功时间
        /// 资金退款至用户账号的时间，格式2017-12-15 09:46:01
        /// </summary>
        public string refund_success_time { set; get; }
        /// <summary>
        /// 退款入账账户
        /// "取当前退款单的退款入账方
        /// 1）退回银行卡：{银行名称}{卡类型}{卡尾号}
        /// 2）退回支付用户零钱: 支付用户零钱
        /// 3）退还商户: 商户基本账户 商户结算银行账户
        /// 4）退回支付用户零钱通: 支付用户零钱通"
        /// </summary>
        public string refund_recv_accout { set; get; }
        /// <summary>
        /// 退款资金来源
        /// "REFUND_SOURCE_RECHARGE_FUNDS---可用余额退款/基本账户 REFUND_SOURCE_UNSETTLED_FUNDS---未结算资金退款 $n为下标，从0开始编号。"
        /// </summary>
        public string refund_account { set; get; }
        /// <summary>
        /// 退款发起来源
        /// "API接口 VENDOR_PLATFORM商户平台"
        /// </summary>
        public string refund_request_source { set; get; }
        /// <summary>
        /// 用户退款金额
        /// 退款给用户的金额，不包含所有优惠券金额
        /// </summary>
        public int cash_refund_fee { set; get; }
    }

    public interface IRefundBaseV2
    {
        /// <summary>
        /// 商户公众账号/应用ID
        /// 调用接口提交的商户公众账号ID
        /// </summary>
        string appid { set; get; }
        /// <summary>
        /// 商户号
        /// 调用接口提交的商户号
        /// </summary>
        string mch_id { set; get; }
        /// <summary>
        /// 随机字符串
        /// 微信返回的随机字符串
        /// </summary>
        string nonce_str { set; get; }
        /// <summary>
        /// 微信订单号
        /// </summary>
        string transaction_id { set; get; }
        /// <summary>
        /// 商户订单号
        /// 商户系统内部订单号，要求32个字符内（最少6个字符），只能是数字、大小写字母_-|*且在同一个商户号下唯一。详见商户订单号
        /// </summary>
        string out_trade_no { set; get; }
        /// <summary>
        /// 商户退款单号
        /// 商户系统内部的退款单号，商户系统内部唯一，只能是数字、大小写字母_-|*@ ，同一退款单号多次请求只退一笔。
        /// </summary>
        string out_refund_no { set; get; }
        /// <summary>
        /// 微信退款单号
        /// </summary>
        string refund_id { set; get; }
        /// <summary>
        /// 订单金额
        /// 订单总金额，单位为分，只能为整数，详见支付金额
        /// </summary>
        int total_fee { set; get; }
        /// <summary>
        /// 应结订单金额
        /// 当订单使用了免充值型优惠券后返回该参数，应结订单金额=订单金额-免充值优惠券金额。
        /// </summary>
        int settlement_total_fee { set; get; }
        /// <summary>
        /// 申请退款金额
        /// 退款总金额,单位为分
        /// </summary>
        int refund_fee { set; get; }
        /// <summary>
        /// 退款金额
        /// 退款金额=申请退款金额-非充值代金券退款金额，退款金额<=申请退款金额
        /// </summary>
        int settlement_refund_fee { set; get; }
        /// <summary>
        /// 退款状态
        /// "SUCCESS-退款成功 、 CHANGE-退款异常 、 REFUNDCLOSE—退款关闭"
        /// </summary>
        string refund_status { set; get; }
        /// <summary>
        /// 退款成功时间
        /// 资金退款至用户账号的时间，格式2017-12-15 09:46:01
        /// </summary>
        string refund_success_time { set; get; }
        /// <summary>
        /// 退款入账账户
        /// "取当前退款单的退款入账方
        /// 1）退回银行卡：{银行名称}{卡类型}{卡尾号}
        /// 2）退回支付用户零钱: 支付用户零钱
        /// 3）退还商户: 商户基本账户 商户结算银行账户
        /// 4）退回支付用户零钱通: 支付用户零钱通"
        /// </summary>
        string refund_recv_accout { set; get; }
        /// <summary>
        /// 退款资金来源
        /// "REFUND_SOURCE_RECHARGE_FUNDS---可用余额退款/基本账户 REFUND_SOURCE_UNSETTLED_FUNDS---未结算资金退款 $n为下标，从0开始编号。"
        /// </summary>
        string refund_account { set; get; }
        /// <summary>
        /// 退款发起来源
        /// "API接口 VENDOR_PLATFORM商户平台"
        /// </summary>
        string refund_request_source { set; get; }
        /// <summary>
        /// 用户退款金额
        /// 退款给用户的金额，不包含所有优惠券金额
        /// </summary>
        int cash_refund_fee { set; get; }
    }
    public class RefundBaseV2 : ResponseNotifyRefundDecode, IRefundBaseV2
    {
        /// <summary>
        /// 商户公众账号/应用ID
        /// 调用接口提交的商户公众账号ID
        /// </summary>
        public string appid { set; get; }
        /// <summary>
        /// 商户号
        /// 调用接口提交的商户号
        /// </summary>
        public string mch_id { set; get; }
        /// <summary>
        /// 随机字符串
        /// 微信返回的随机字符串
        /// </summary>
        public string nonce_str { set; get; }
    }
    public class SpRefundBaseV2 : ResponseNotifyRefundDecode, IRefundBaseV2
    {
        /// <summary>
        /// 商户公众账号/应用ID
        /// 调用接口提交的商户公众账号ID
        /// </summary>
        public string appid { set; get; }
        /// <summary>
        /// 商户号
        /// 调用接口提交的商户号
        /// </summary>
        public string mch_id { set; get; }
        /// <summary>
        /// 子商户公众账号/应用ID
        /// 调用接口提交的子商户公众账号ID
        /// </summary>
        public string sub_appid { set; get; }
        /// <summary>
        /// 子商户号
        /// 调用接口提交的子商户号
        /// </summary>
        public string sub_mch_id { set; get; }
        /// <summary>
        /// 随机字符串
        /// 微信返回的随机字符串
        /// </summary>
        public string nonce_str { set; get; }
    }
}